Skip to content

Build icons as plain SVG - #519

Merged
firestar300 merged 2 commits into
masterfrom
ci/svg
Oct 19, 2026
Merged

firestar300 merged 2 commits into
masterfrom
ci/svg

Conversation

@firestar300

Copy link
Copy Markdown
Contributor

Summary

Cette PR enrichit la chaîne de build et l’affichage des icônes SVG du thème :

  • Build : en plus des sprites dans dist/icons/, chaque SVG source sous src/img/icons/ est optimisé (SVGO) et copié dans dist/images/ en conservant l’arborescence (sprite/, social/, etc.).
  • PHP : get_the_icon() / the_icon() acceptent un 3ᵉ paramètre $is_sprite (défaut true) pour choisir entre référence sprite (<use>) et SVG fichier inline.
  • Config SVGO : alignement sur SVGO 4 (suppression de l’override removeViewBox obsolète qui provoquait un warning au build).

Le comportement existant (sprites + cache-busting via sprite-hashes.asset.php) reste inchangé par défaut.

Changements techniques

Zone Détail
config/webpack-icon-files-plugin.js Nouveau plugin Webpack (afterEmit) : lecture src/img/icons/**/*.svg → écriture dist/images/** avec config/svgo.config.js
config/plugins.js Enregistrement du plugin
config/svgo.config.js Preset SVGO 4 simplifié
package.json Dépendance svgo (utilisée par le plugin)
inc/Services/Svg.php $is_sprite, parsing d’identifiant, chargement sécurisé du fichier, injection des classes sur la balise <svg> racine
inc/Helpers/Svg.php Propagation du paramètre $is_sprite

Exemples d’usage

// Sprite (comportement actuel)
\BEA\Theme\Framework\Helpers\Svg\the_icon( 'menu' );
\BEA\Theme\Framework\Helpers\Svg\get_the_icon( 'social/facebook' );

// SVG fichier complet (inline)
\BEA\Theme\Framework\Helpers\Svg\the_icon( 'menu', [], false );
\BEA\Theme\Framework\Helpers\Svg\get_the_icon( 'social/facebook', [ 'post-sharing__icon' ], false );

Chemins générés côté build, par exemple :

  • src/img/icons/sprite/menu.svg → dist/icons/sprite.svg (sprite) et dist/images/sprite/menu.svg (fichier)
  • src/img/icons/social/facebook.svg → dist/icons/social.svg et dist/images/social/facebook.svg

Test plan

  • npm run build sans erreur (vérifier l’absence du warning SVGO removeViewBox)
  • Présence des sprites : dist/icons/sprite.svg, dist/icons/social.svg
  • Présence des SVG unitaires : dist/images/sprite/*.svg, dist/images/social/*.svg
  • Front : icônes existantes en sprite (the_icon( 'share' ), partage d’article, etc.) inchangées visuellement
  • Test manuel du mode inline : the_icon( 'menu', [], false ) — markup SVG complet dans le HTML, classes icon / icon-menu présentes
  • Test identifiant réseau social : get_the_icon( 'social/facebook', [], false ) — fichier dist/images/social/facebook.svg bien servi
  • Cas limite : identifiant inconnu ou fichier manquant → chaîne vide, pas d’erreur PHP

Notes

  • Les SVG inline proviennent uniquement de dist/images/ (artefacts de build du thème) ; le chemin est validé via realpath sous dist/images.
  • Pour l’optimisation SVG, la stack du thème s’appuie sur SVGO (svgo-loader pour les sprites, plugin dédié pour les fichiers unitaires, imagemin-svgo dans la minification d’images).

Comment thread config/svgo.config.js Outdated
Comment thread inc/Helpers/Svg.php
Comment thread inc/Services/Svg.php
Comment thread package.json Outdated
@cursor

cursor Bot commented Oct 12, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

Comment thread config/svgo.config.js
@cedric07

cedric07 commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Register les collection du bloc icône natif avec les icônes de notre thème ? (theme, social)
A faire ici ?
Dans une PR dédiée ?

@firestar300
firestar300 merged commit 0e66943 into master Oct 19, 2026
5 checks passed
@firestar300
firestar300 deleted the ci/svg branch October 19, 2026 15:23
@firestar300 firestar300 mentioned this pull request Oct 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants